home *** CD-ROM | disk | FTP | other *** search
/ Planet Source Code Jumbo …e CD Visual Basic 1 to 7 / 4_2005-2006.ISO / data / Zips / SelfSub_2_1986904132006.psc / SelfSub 2.1 / Asm / Callback.asm
Assembly Source File  |  2006-04-13  |  3KB  |  63 lines

  1. ;*****************************************************************************************
  2. ;** Callback.asm - Generic Class/Form/UserControl callback thunk. Assemble with nasm.
  3. ;**
  4. ;** Paul_Caton@hotmail.com
  5. ;** Copyright free, use and abuse as you see fit.
  6. ;**
  7. ;** v1.0 The original............................................................ 20060408
  8. ;** v1.1 IDE safe................................................................ 20060409
  9. ;** v1.1 Validate that the callback address is live code......................... 20060413
  10. ;*****************************************************************************************
  11.  
  12. ;***********************
  13. ;Definitions
  14. %define objOwner        [ebx]       ;Owner object address
  15. %define addrCallback    [ebx +  4]  ;Callback address
  16. %define fnEbMode        [ebx +  8]  ;EbMode address
  17. %define fnIsBadCodePtr  [ebx + 12]  ;EbMode address
  18. %define RetValue        [ebp -  4]  ;Callback/thunk return value
  19.  
  20. [bits 32]
  21. ;************
  22. ;Data storage
  23.     dd_objOwner         dd 0        ;Owner object address
  24.     dd_addrCallback     dd 0        ;Callback address
  25.     dd_fnEbmode         dd 0        ;EbMode address
  26.     dd_fnIsBadCodePtr   dd 0        ;IsBadCodePtr address
  27.     
  28. ;***********
  29. ;Thunk start    
  30.     mov     eax, esp                ;Get a copy of esp as it is now
  31.     pushad                          ;Push all the cpu registers on to the stack
  32.     mov     ebx, 012345678h         ;Address of the data, patched from VB
  33.     mov     ebp, eax                ;Set ebp to point to the return address
  34.     
  35.     push    dword addrCallback      ;Callback address
  36.     call    fnIsBadCodePtr          ;Call IsBadCodePtr
  37.     jnz     _return                 ;If the callback code isn't live, return
  38.     
  39.     cmp     fnEbMode, dword 0       ;Are we running in the IDE?
  40.     jnz     _ide_state              ;Check the IDE state
  41.  
  42. _ide_running:    
  43.     mov     eax, ebp                ;Copy the stack frame pointer
  44.     sub     eax, 4                  ;Address of the callback/thunk return value
  45.     push    eax                     ;Push the return value address
  46.     nop
  47.     
  48.     mov     ecx, 012345678h         ;Parameter count into ecx, patched from VB
  49.     jecxz   _callback               ;If parameter count = 0, skip _parameter_loop
  50.     
  51. _parameter_loop:
  52.     push    dword [ebp + ecx * 4]   ;Push parameter
  53. %define addrCa[ebp    dwoo 0,
  54.   ;pv?,o 
  55.      0        ;I ndwoo 0,
  56.  eB;*******oop:
  57.     woo 0eennnnnbeter count ram[ebpm      .val4dee   e2  cmp     rameter_0t- ofsDe oueela  [eesturndaeenn oeter count ram[ebpm      .val4dee   e2  cmp     rameter_0t- ofsDe oueela  [eesturndaeenn oetmB;*Etnount rao 4]eax, ebp            
  58. 2t  [eesturndaeenn osnuP
  59. mse ouer     esturndaeenneArrpl;er_lrnz  eer_bm9bp     a:rpl       eter co    l;ernhCa;enn osnuP
  60. mse oue     a:*ne     he callback/thuGdhe callback/thuGp;er co    l;ernjie ofsDej
  61. /turn vale  eMpeto poinint macksest Onaspetont ranint maej
  62. /turn vale ,
  63.   ;pv looethuG1e7  ;Ppbt     oupbnt macksest Onaspetont ranintbmensml   ntba w=urn vallpcksya hOnaspetontl   ntba w=urmse oue     a:* mse oue     a:* mse oue     a:* mse oue     a:* mse oue     a:* mse o